package netty.im.server;

import org.apache.log4j.Logger;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class SimpleChatServer {

	   private int port;
	   
	   private static Logger log = Logger.getLogger(SimpleChatServer.class);  
	   
	    public SimpleChatServer(int port) {
	        this.port = port;
	    }
	 
	    public void run(){
	 
	        EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
	        EventLoopGroup workerGroup = new NioEventLoopGroup();
	        try {
	            ServerBootstrap b = new ServerBootstrap(); // (2)
	            b.group(bossGroup, workerGroup)
	             .channel(NioServerSocketChannel.class) // (3)
	             .childHandler(new SimpleChatServerInitializer())  //(4)
	             .option(ChannelOption.SO_BACKLOG, 128)          // (5)
	             .childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
	 
	           // System.out.println("SimpleChatServer 启动了");
	            log.info("SimpleChatServer 启动了");
	            // 绑定端口，开始接收进来的连接
	            ChannelFuture f = b.bind(port).sync(); // (7)
	 
	            // 等待服务器  socket 关闭 。
	            // 在这个例子中，这不会发生，但你可以优雅地关闭你的服务器。
	            f.channel().closeFuture().sync();
	 
	        } catch(Exception e){
	        	log.error("启动server异常", e);
	        }finally {
	            workerGroup.shutdownGracefully();
	            bossGroup.shutdownGracefully();
	 
	            System.out.println("SimpleChatServer 关闭了");
	        }
	    }
	 
	    
	    /**
	     * 初始化即时聊天服务server
	     * @throws Exception
	     */
	    public void init(){
		        new SimpleChatServer(port).run();
	    }
	    
	   /* public static void main(String[] args) throws Exception {
	        int port;
	        if (args.length > 0) {
	            port = Integer.parseInt(args[0]);
	        } else {
	            port = 8090;
	        }
	        new SimpleChatServer(port).run();
	 
	    }*/
	
}
